home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * parse.h
- *
- * This header file is included by all all language parsing C modules in
- * POV-Ray.
- *
- * from Persistence of Vision Raytracer
- * Copyright 1993 Persistence of Vision Team
- *---------------------------------------------------------------------------
- * NOTICE: This source code file is provided so that users may experiment
- * with enhancements to POV-Ray and to port the software to platforms other
- * than those supported by the POV-Ray Team. There are strict rules under
- * which you are permitted to use this file. The rules are in the file
- * named POVLEGAL.DOC which should be distributed with this file. If
- * POVLEGAL.DOC is not available or for more info please contact the POV-Ray
- * Team Coordinator by leaving a message in CompuServe's Graphics Developer's
- * Forum. The latest version of POV-Ray may be found there as well.
- *
- * This program is based on the popular DKB raytracer version 2.12.
- * DKBTrace was originally written by David K. Buck.
- * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
- *
- *****************************************************************************/
-
- /* Here we create our own little language for doing the parsing. It
- makes the code easier to read. */
-
- #define EXPECT { int Exit_Flag; Exit_Flag = FALSE; \
- while (!Exit_Flag) {Get_Token(); switch (Token.Token_Id) {
- #define CASE(x) case x:
- #define CASE2(x, y) case x: case y:
- #define CASE3(x, y, z) case x: case y: case z:
- #define CASE4(w, x, y, z) case w: case x: case y: case z:
- #define CASE5(v, w, x, y, z) case v: case w: case x: case y: case z:
- #define CASE6(u, v, w, x, y, z) case u: case v: case w: case x: case y: case z:
- #define END_CASE break;
- #define EXIT Exit_Flag = TRUE;
- #define OTHERWISE default:
- #define END_EXPECT } } }
- #define GET(x) Get_Token(); if (Token.Token_Id != x) Parse_Error (x);
- #define UNGET Unget_Token();
- #define CASE_VECTOR CASE3 (LEFT_PAREN_TOKEN, VECTOR_ID_TOKEN, FLOAT_ID_TOKEN)\
- CASE5 (CLOCK_TOKEN, LEFT_ANGLE_TOKEN, PLUS_TOKEN, DASH_TOKEN, FLOAT_TOKEN)\
- CASE4 (X_TOKEN, Y_TOKEN, Z_TOKEN, VERSION_TOKEN) UNGET
- #define CASE_FLOAT CASE3 (LEFT_PAREN_TOKEN, FLOAT_ID_TOKEN, CLOCK_TOKEN)\
- CASE4 (PLUS_TOKEN, DASH_TOKEN, FLOAT_TOKEN, VERSION_TOKEN) UNGET
-
- #define MAX_BRACES 200
-
- #define CASEID(x,y) case x:Token.Token_Id=y;break;
-
- /* Token Definitions for Parser */
-
- #define ADAPTIVE_TOKEN 0
- #define AGATE_TOKEN 1
- #define ALL_TOKEN 2
- #define ALPHA_TOKEN 3
- #define AMBIENT_TOKEN 4
- #define AMPERSAND_TOKEN 5
- #define AREA_LIGHT_TOKEN 6
- #define AT_TOKEN 7
- #define BACK_QUOTE_TOKEN 8
- #define BACK_SLASH_TOKEN 9
- #define BAR_TOKEN 10
- #define BICUBIC_PATCH_TOKEN 11
- #define BLOB_TOKEN 12
- #define BLUE_TOKEN 13
- #define BOUNDED_BY_TOKEN 14
- #define BOX_TOKEN 15
- #define BOZO_TOKEN 16
- #define BRICK_TOKEN 17
- #define BRILLIANCE_TOKEN 18
- #define BUMPS_TOKEN 19
- #define BUMPY1_TOKEN 20
- #define BUMPY2_TOKEN 21
- #define BUMPY3_TOKEN 22
- #define BUMP_MAP_TOKEN 23
- #define BUMP_SIZE_TOKEN 24
- #define CAMERA_ID_TOKEN 25
- #define CAMERA_TOKEN 26
- #define CHECKER_TOKEN 27
- #define CLIPPED_BY_TOKEN 28
- #define CLOCK_TOKEN 29
- #define COLON_TOKEN 30
- #define COLOR_MAP_TOKEN 31
- #define COLOR_TOKEN 32
- #define COLOUR_ID_TOKEN 33
- #define COLOUR_MAP_ID_TOKEN 34
- #define COLOUR_MAP_TOKEN 35
- #define COLOUR_TOKEN 36
- #define COMMA_TOKEN 37
- #define COMPONENT_TOKEN 38
- #define COMPOSITE_TOKEN 39
- #define CONE_TOKEN 40
- #define CRAND_TOKEN 41
- #define CUBIC_TOKEN 42
- #define CYLINDER_TOKEN 43
- #define DASH_TOKEN 44
- #define DECLARE_TOKEN 45
- #define DEFAULT_TOKEN 46
- #define DENTS_TOKEN 47
- #define DIFFERENCE_TOKEN 48
- #define DIFFUSE_TOKEN 49
- #define DIRECTION_TOKEN 50
- #define DISC_TOKEN 51
- #define DISTANCE_TOKEN 52
- #define DOLLAR_TOKEN 53
- #define DUMP_TOKEN 54
- #define END_OF_FILE_TOKEN 55
- #define EQUALS_TOKEN 56
- #define EXCLAMATION_TOKEN 57
- #define FALLOFF_TOKEN 58
- #define FINISH_ID_TOKEN 59
- #define FINISH_TOKEN 60
- #define FLATNESS_TOKEN 61
- #define FLOAT_ID_TOKEN 62
- #define FLOAT_TOKEN 63
- #define FOG_TOKEN 64
- #define FREQUENCY_TOKEN 65
- #define GIF_TOKEN 66
- #define GRADIENT_TOKEN 67
- #define GRANITE_TOKEN 68
- #define GREEN_TOKEN 69
- #define HASH_TOKEN 70
- #define HAT_TOKEN 71
- #define HEIGHT_FIELD_TOKEN 72
- #define HEXAGON_TOKEN 73
- #define IDENTIFIER_TOKEN 74
- #define IFF_TOKEN 75
- #define IMAGE_MAP_TOKEN 76
- #define INCLUDE_TOKEN 77
- #define INTERPOLATE_TOKEN 78
- #define INTERSECTION_TOKEN 79
- #define INVERSE_TOKEN 80
- #define IOR_TOKEN 81
- #define JITTER_TOKEN 82
- #define LAMBDA_TOKEN 83
- #define LEFT_ANGLE_TOKEN 84
- #define LEFT_CURLY_TOKEN 85
- #define LEFT_PAREN_TOKEN 86
- #define LEFT_SQUARE_TOKEN 87
- #define LEOPARD_TOKEN 88
- #define LIGHT_SOURCE_TOKEN 89
- #define LOCATION_TOKEN 90
- #define LOOKS_LIKE_TOKEN 91
- #define LOOK_AT_TOKEN 92
- #define MANDEL_TOKEN 93
- #define MAP_TYPE_TOKEN 94
- #define MARBLE_TOKEN 95
- #define MATERIAL_MAP_TOKEN 96
- #define MAX_INTERSECTIONS 97
- #define MAX_TRACE_LEVEL_TOKEN 98
- #define MERGE_TOKEN 99
- #define METALLIC_TOKEN 100
- #define MORTAR_TOKEN 101
- #define NO_SHADOW_TOKEN 102
- #define OBJECT_ID_TOKEN 103
- #define OBJECT_TOKEN 104
- #define OCTAVES_TOKEN 105
- #define OMEGA_TOKEN 106
- #define ONCE_TOKEN 107
- #define ONION_TOKEN 108
- #define PAINTED1_TOKEN 109
- #define PAINTED2_TOKEN 110
- #define PAINTED3_TOKEN 111
- #define PERCENT_TOKEN 112
- #define PHASE_TOKEN 113
- #define PHONG_SIZE_TOKEN 114
- #define PHONG_TOKEN 115
- #define PIGMENT_ID_TOKEN 116
- #define PIGMENT_TOKEN 117
- #define PLANE_TOKEN 118
- #define PLUS_TOKEN 119
- #define POINT_AT_TOKEN 120
- #define POLY_TOKEN 121
- #define POT_TOKEN 122
- #define QUADRIC_TOKEN 123
- #define QUARTIC_TOKEN 124
- #define QUESTION_TOKEN 125
- #define QUICK_COLOR_TOKEN 126
- #define QUICK_COLOUR_TOKEN 127
- #define RADIAL_TOKEN 128
- #define RADIUS_TOKEN 129
- #define RAW_TOKEN 130
- #define RED_TOKEN 131
- #define REFLECTION_TOKEN 132
- #define REFRACTION_TOKEN 133
- #define RGBF_TOKEN 134
- #define RGB_TOKEN 135
- #define RIGHT_ANGLE_TOKEN 136
- #define RIGHT_CURLY_TOKEN 137
- #define RIGHT_PAREN_TOKEN 138
- #define RIGHT_SQUARE_TOKEN 139
- #define RIGHT_TOKEN 140
- #define RIPPLES_TOKEN 141
- #define ROTATE_TOKEN 142
- #define ROUGHNESS_TOKEN 143
- #define SCALE_TOKEN 144
- #define SEMI_COLON_TOKEN 145
- #define SINGLE_QUOTE_TOKEN 146
- #define SKY_TOKEN 147
- #define SLASH_TOKEN 148
- #define SMOOTH_TOKEN 149
- #define SMOOTH_TRIANGLE_TOKEN 150
- #define SPECULAR_TOKEN 151
- #define SPHERE_TOKEN 152
- #define SPOTLIGHT_TOKEN 153
- #define SPOTTED_TOKEN 154
- #define STAR_TOKEN 155
- #define STRING_TOKEN 156
- #define STURM_TOKEN 157
- #define TEXTURE_ID_TOKEN 158
- #define TEXTURE_TOKEN 159
- #define TGA_TOKEN 160
- #define THRESHOLD_TOKEN 161
- #define TIGHTNESS_TOKEN 162
- #define TILDE_TOKEN 163
- #define TILE2_TOKEN 164
- #define TILES_TOKEN 165
- #define TNORMAL_ID_TOKEN 166
- #define TNORMAL_TOKEN 167
- #define TORUS_TOKEN 168
- #define TRACK_TOKEN 169
- #define TRANSFORM_ID_TOKEN 170
- #define TRANSFORM_TOKEN 171
- #define TRANSLATE_TOKEN 172
- #define TRIANGLE_TOKEN 173
- #define TURBULENCE_TOKEN 174
- #define TYPE_TOKEN 175
- #define UNION_TOKEN 176
- #define UP_TOKEN 177
- #define USE_COLOR_TOKEN 178
- #define USE_COLOUR_TOKEN 179
- #define USE_INDEX_TOKEN 180
- #define U_STEPS_TOKEN 181
- #define VECTOR_ID_TOKEN 182
- #define VERSION_TOKEN 183
- #define V_STEPS_TOKEN 184
- #define WATER_LEVEL_TOKEN 185
- #define WAVES_TOKEN 186
- #define WOOD_TOKEN 187
- #define WRINKLES_TOKEN 188
- #define X_TOKEN 189
- #define Y_TOKEN 190
- #define Z_TOKEN 191
- #define BACKGROUND_TOKEN 192
- #define OPEN_TOKEN 193
- #define FILTER_TOKEN 194
- #define AGATE_TURB_TOKEN 195
- #define LAST_TOKEN 196
-